package com.utils;

/**
 * 当前用户信息持有者，用于在请求处理过程中存储和获取当前登录用户信息
 * 使用ThreadLocal确保线程安全
 */
public class CurrentUserHolder {
    private static final ThreadLocal<Integer> USER_ID_HOLDER = new ThreadLocal<>();
    private static final ThreadLocal<String> USERNAME_HOLDER = new ThreadLocal<>();
    private static final ThreadLocal<String> ROLE_HOLDER = new ThreadLocal<>();
    
    /**
     * 设置当前用户ID
     * @param userId 用户ID
     */
    public static void setUserId(Integer userId) {
        USER_ID_HOLDER.set(userId);
    }
    
    /**
     * 获取当前用户ID
     * @return 用户ID
     */
    public static Integer getUserId() {
        return USER_ID_HOLDER.get();
    }
    
    /**
     * 设置当前用户名
     * @param username 用户名
     */
    public static void setUsername(String username) {
        USERNAME_HOLDER.set(username);
    }
    
    /**
     * 获取当前用户名
     * @return 用户名
     */
    public static String getUsername() {
        return USERNAME_HOLDER.get();
    }
    
    /**
     * 设置当前用户角色
     * @param role 用户角色
     */
    public static void setRole(String role) {
        ROLE_HOLDER.set(role);
    }
    
    /**
     * 获取当前用户角色
     * @return 用户角色
     */
    public static String getRole() {
        return ROLE_HOLDER.get();
    }
    
    /**
     * 清除当前线程中的用户信息，防止内存泄漏
     */
    public static void clear() {
        USER_ID_HOLDER.remove();
        USERNAME_HOLDER.remove();
        ROLE_HOLDER.remove();
    }
}